const express = require('express')
const cors = require('cors')
const app = express()
app.use(cors())
app.use(express.json())
const port = 7000
let appPid

app.post('/reply', (req, res) => {
  if (req.body && req.body.msg !== 'TEST') {
    throw new Error(`unexpected reply ${JSON.stringify(req.body)}`)
  }
  console.log('App event replied')
  exit(0)
})

const server = app.listen(port, () =>
  console.log(`Test listening on port ${port}!`)
)

const exit = (code) => {
  server.close()
  process.kill(appPid)
  process.exit(code)
}

const path = require('path')
const dist = path.resolve(__dirname, 'dist')

const build = require('../tooling/cli.js/dist/api/build')
build({
  build: {
    devPath: dist
  },
  ctx: {
    debug: true
  }
}).then(() => {
  const spawn = require('../tooling/cli.js/dist/helpers/spawn').spawn
  const artifactPath = path.resolve(__dirname, 'src-tauri/target/debug/app')
  appPid = spawn(
    process.platform === 'win32'
      ? `${artifactPath}.exe`
      : artifactPath.replace('debug/app', 'debug/./app'),
    [],
    null
  )

  // if it didn't reply, throw an error
  setTimeout(() => {
    throw new Error("App didn't reply")
  }, 2000)
})
